package com.learn.dubbo.core.redis.core;

import java.util.List;
import java.util.Set;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.SortingParams;

import com.learn.dubbo.core.redis.Interface.JedisKeys;

public class DefaultJedisKeys extends JedisBase implements JedisKeys {
	
	/**
     * 缓存生存时间
     */
     private final int expire = 60000;
	/**
 	 * @Title: rename 
 	 * @author 林彬
 	 * @Description: 字符串返回OK或error。
		如果旧的key和新的key名称相同或者key不存在,它会返回一个错误.
		如果新的键已经存在，则覆盖现有的key。 
 	 * @date 2016年12月28日 下午2:02:09 
 	 * @return String   
 	 * @throws
 	 */
     @Override
 	public String rename(String oldkey,String newkey){
 		Jedis jedis = getJedis();
 		String result = jedis.rename(oldkey, newkey);
 		close(jedis);
 		return result;
 	}
 	
    /**
     * 设置过期时间
     * 以秒为单位
     * @author ruan 2013-4-11
     * @param key
     * @param seconds
     */
     @Override
     public void expire(String key, int seconds) {
        if (seconds <= 0) {
            return;
        }
        Jedis jedis = getJedis();
        jedis.expire(key, seconds);
        close(jedis);
     }

    /**
     * 设置默认过期时间
     *
     * @author ruan 2013-4-11
     * @param key
     */
     @Override
     public void expire(String key) {
        expire(key, expire);
     }
    
    /**
     * 设置key的过期时间,它是距历元（即格林威治标准时间 1970 年 1 月 1 日的 00:00:00，格里高利历）的偏移量。
     *
     * @param String key
     * @param 时间,已秒为单位
     * @return 影响的记录数
     * */
     @Override
    public long expireAt(String key, long timestamp) {
        Jedis jedis = getJedis();
        long count = jedis.expireAt(key, timestamp);
        close(jedis);
        return count;
    }

    /**
     * 查询key的过期时间
     *
     * @param String key
     * @return 以秒为单位的时间表示
     * */
     @Override
    public long ttl(String key) {
        Jedis jedis=getJedis();
        long len = jedis.ttl(key);
        close(jedis);
        return len;
    }

    /**
     * 取消对key过期时间的设置
     *
     * @param key
     * @return 影响的记录数
     * */
     @Override
    public long persist(String key) {
        Jedis jedis = getJedis();
        long count = jedis.persist(key);
        close(jedis);
        return count;
    }
     
     /**
      * 删除keys对应的记录,可以是多个key
      *
      * @param String
      *            ... keys
      * @return 删除的记录数
      * */
     @Override
     public long del(String... keys) {
         Jedis jedis = getJedis();
         long count = jedis.del(keys);
         close(jedis);
         return count;
     }
     
     /**
      * 判断key是否存在
      *
      * @param String key
      * @return boolean
      * */
     @Override
     public boolean exists(String key) {
         Jedis jedis=getJedis(); 
         boolean exis = jedis.exists(key);
         close(jedis);
         return exis;
     }
     
     /**
      * 返回指定key存储的类型
      *
      * @param String
      *            key
      * @return String string|list|set|zset|hash
      * **/
     @Override
     public String type(String key) {
         Jedis jedis=getJedis(); 
         String type = jedis.type(key);
         close(jedis);
         return type;
     }
     
     /**
      * 查找所有匹配给定的模式的键，对key的模糊查询
      *
      * @param String
      *            key的表达式,*表示多个，？表示一个
      * Set<String> keys = jedis.keys("*");
		Set<String> keys = jedis.keys("user.userid.*");
      * */
     @Override
     public Set<String> keys(String pattern) {
         Jedis jedis = getJedis();
         Set<String> set = jedis.keys(pattern);
         close(jedis);
         return set;
     }
     
     /**
      * 对List,Set,SortSet进行排序,如果集合数据较大应避免使用这个方法
      *
      * @param String
      *            key
      * @return List<String> 集合的全部记录
      * **/
     @Override
     public List<String> sort(String key) {
         Jedis jedis=getJedis(); 
         List<String> list = jedis.sort(key);
         close(jedis);
         return list;
     }

     /**
      * 对List,Set,SortSet进行排序或limit
      *
      * @param String
      *            key
      * @param SortingParams
      *            parame 定义排序类型或limit的起止位置.
      * @return List<String> 全部或部分记录
      * **/
     @Override
     public List<String> sort(String key, SortingParams parame) {
         Jedis jedis=getJedis();
         List<String> list = jedis.sort(key, parame);
         close(jedis);
         return list;
     }
     
     /**
      * 
      * @Title: dbsize 
      * @author 林彬
      * @Description: 返回当前数据库中key的数目 
      * @date 2016年12月28日 下午3:20:56 
      * @return Long   
      * @throws
      */
     @Override
     public Long dbsize() {
         Jedis jedis=getJedis();
         Long num = jedis.dbSize();
         close(jedis);
         return num;
     }
}
